package edu.cuit.wedding.entity.dto;

/**
 * 统一响应数据模型
 * jdk14 提供的记录record类型(一种特殊模式的类)
 *      1. 该类所有的属性字段是在()中进行定义
 *      2. 属性是final,所以不会提供对应的setter,读取属性值: result.code()
 *      3. 全参的构造方法
 *      4. toString()
 *      5. hashCode()及equals()
 * @param code 业务状态码
 * @param data 业务数据
 * @param message 业务消息提示
 * @param <T> 类型化参数
 */
public record ResponseResult<T>(int code, T data, String message) {
    public static<T> ResponseResult<T> ok(){
        return new ResponseResult<>(2000, null, "业务执行成功");
    }

    public static<T> ResponseResult<T> ok(T data){
        return new ResponseResult<>(2000, data, "业务执行成功");
    }

    public static<T> ResponseResult<T> ok(T data, String message){
        return new ResponseResult<>(2000, data, message);
    }

    public static<T> ResponseResult<T> fail(){
        return new ResponseResult<>(5000, null, "业务执行失败");
    }

    public static<T> ResponseResult<T> fail(String message){
        return new ResponseResult<>(5000, null, message);
    }
}
